/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managers;

import conexionBD.ConexionServidor;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

/**
 *
 * @author ruanda
 */
@ManagedBean
@SessionScoped
public class managerControlFechas implements Serializable {

    private String numeroExpe;
    private String fechacreaSolicitud;
    private String fechacreaExpediente;
    private String fechaFinExpediente;
    private Integer dias;
    FacesContext context;

    /** Creates a new instance of managerControlFechas */
    public managerControlFechas() {
    }

    public String getFechaFinExpediente() {
        return fechaFinExpediente;
    }

    public void setFechaFinExpediente(String fechaFinExpediente) {
        this.fechaFinExpediente = fechaFinExpediente;
    }

    public String getFechacreaExpediente() {
        return fechacreaExpediente;
    }

    public void setFechacreaExpediente(String fechacreaExpediente) {
        this.fechacreaExpediente = fechacreaExpediente;
    }

    public String getFechacreaSolicitud() {
        return fechacreaSolicitud;
    }

    public void setFechacreaSolicitud(String fechacreaSolicitud) {
        this.fechacreaSolicitud = fechacreaSolicitud;
    }

    public String getNumeroExpe() {
        return numeroExpe;
    }

    public void setNumeroExpe(String numeroExpe) {
        this.numeroExpe = numeroExpe;
    }

    public Integer getDias() {
        return dias;
    }

    public void setDias(Integer dias) {
        this.dias = dias;
    }


    public void consultarFechasExpediente() {
        ConexionServidor miConexion = new ConexionServidor();
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from control_fecha where idexpediente=?");
            ps.setString(1, numeroExpe);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                fechacreaSolicitud = rs.getString("creacionsolicitud");
                fechacreaExpediente = rs.getString("creacionexpediente");
                fechaFinExpediente = rs.getString("finalizacionproyec");
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public String limpiar() {
        String destino = "hacia-inicio";
        numeroExpe = "";
        fechacreaSolicitud = "";
        fechacreaExpediente = "";
        fechaFinExpediente = "";
        return destino;
    }

    public Boolean hayResultados() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        ResultSet rs = null;
        Boolean isNotEmpty = null;
        try {
            Connection con = miConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from expediente where idexpediente = ?");
            ps.setString(1, numeroExpe);
            rs = ps.executeQuery();
            isNotEmpty = rs.next();
            rs.close();
            ps.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return isNotEmpty;
    }

    public String buscandoInfo() throws Exception {
        String destino = null;
        if (hayResultados()) {
            consultarFechasExpediente();
            diasrestantes();
        } else {
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "BUSQUEDA EXPEDIENTE", "El expediente ingresado no existe"));
            limpiar();
        }
        return destino;
    }

    public Result getListaExpediente() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from expediente");
            return ResultSupport.toResult(rs);
        } finally {
            conn.close();
        }
    }

    public void diasrestantes() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{? = call contardias(?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting the parameters to be catched by the stored procedure
            cs.registerOutParameter(1, java.sql.Types.INTEGER);
            cs.setString(2, numeroExpe);
            cs.execute();
            dias = cs.getInt(1);
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
